package com.chehejia.devmng.platform.java8.java_stream.demo;

import org.junit.jupiter.api.Test;

import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
 *  * @Description:
 *  * @author: 王永坤
 *  * @Date: 2018/12/29 14:57
 *  
 */
public class Test2 {

    // 勾股定理  a * a + b * b = c * c
    @Test
    public void test1(){
        Stream<int[]> pythagoreanTriples =
                IntStream.rangeClosed(1, 100).boxed()
                        .flatMap(a ->
                                IntStream.rangeClosed(a, 100)
                                        .filter(b -> Math.sqrt(a*a + b*b) % 1 == 0)
                                        .mapToObj(b ->
                                                new int[]{a, b, (int)Math.sqrt(a * a + b * b)})
                        );

        pythagoreanTriples.limit(5)
                .forEach(t ->
                        System.out.println(t[0] + ", " + t[1] + ", " + t[2]));
    }
    //--------构建流
    @Test
    public void createStream (){
        // Stream.of 创建
        Stream<String> s1 = Stream.of("Java", "C#","aaccc","dddd");
        s1.map(String::toUpperCase).forEach(System.out::println);

        // 创建 无限流
        Stream.iterate(0,n -> n +1).limit(10).forEach(System.out::println);
    }

    // 斐波那契元数组

    /**
     * 下面这个数列就是斐波纳契数列的一部分：0, 1, 1,
     * 2, 3, 5, 8, 13, 21, 34, 55…数列中开始的两个数字是0和1，后续的每个数字都是前两个数字之和。
     */
    @Test
    public void  test2(){
        Stream.iterate(new int[]{0,1},t -> new int[]{t[1],t[0]+t[1]}).limit(20).forEach(t -> System.out.println("("+t[0]+","+t[1]+")"));
    }
}
